styleproperty: make background-image an array value
authorCosimo Cecchi <cosimoc@gnome.org>
Thu, 10 May 2012 15:18:29 +0000 (11:18 -0400)
committerCosimo Cecchi <cosimoc@gnome.org>
Tue, 15 May 2012 17:24:40 +0000 (13:24 -0400)
This also requires having the GtkCssArrayValue parse func forward the
base GFile from the style property parse implementation.

gtk/gtkcssstylepropertyimpl.c
gtk/gtkthemingbackground.c

index ad60d93d53f09ce607f59ca72c12bf6cc8be3999..6cf1d039e859b8d435ca6e9c4f5536d35455a135 100644 (file)
@@ -616,6 +616,49 @@ css_image_value_assign (GtkCssStyleProperty *property,
   return _gtk_css_image_value_new (NULL);
 }
 
+static GtkCssValue *
+background_image_value_parse_one (GtkCssParser *parser)
+{
+  return css_image_value_parse (NULL, parser);
+}
+
+static GtkCssValue *
+background_image_value_parse (GtkCssStyleProperty *property,
+                              GtkCssParser        *parser)
+{
+  return _gtk_css_array_value_parse (parser, background_image_value_parse_one, FALSE);
+}
+
+static GtkCssValue *
+background_image_value_compute_one (GtkCssValue     *value,
+                                    GtkStyleContext *context)
+{
+  return css_image_value_compute (NULL, context, value);
+}
+
+static GtkCssValue *
+background_image_value_compute (GtkCssStyleProperty    *property,
+                                GtkStyleContext        *context,
+                                GtkCssValue            *specified)
+{
+  return _gtk_css_array_value_compute (specified, background_image_value_compute_one, context);
+}
+
+static void
+background_image_value_query (GtkCssStyleProperty *property,
+                              const GtkCssValue   *css_value,
+                              GValue              *value)
+{
+  css_image_value_query (property, _gtk_css_array_value_get_nth (css_value, 0), value);
+}
+
+static GtkCssValue *
+background_image_value_assign (GtkCssStyleProperty *property,
+                               const GValue        *value)
+{
+  return _gtk_css_array_value_new (css_image_value_assign (property, value));
+}
+
 static GtkCssValue *
 font_size_parse (GtkCssStyleProperty *property,
                  GtkCssParser        *parser)
@@ -1374,12 +1417,12 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_BACKGROUND_IMAGE,
                                           CAIRO_GOBJECT_TYPE_PATTERN,
                                           GTK_STYLE_PROPERTY_ANIMATED,
-                                          css_image_value_parse,
+                                          background_image_value_parse,
                                           NULL,
-                                          css_image_value_compute,
-                                          css_image_value_query,
-                                          css_image_value_assign,
-                                          _gtk_css_image_value_new (NULL));
+                                          background_image_value_compute,
+                                          background_image_value_query,
+                                          background_image_value_assign,
+                                          _gtk_css_array_value_new (_gtk_css_image_value_new (NULL)));
 
   gtk_css_style_property_register        ("border-image-source",
                                           GTK_CSS_PROPERTY_BORDER_IMAGE_SOURCE,
index 4bc5d5e2f028ef652b9036bcc597ae71652562a6..ead751880444ad6234da8800de8423a48c894cef 100644 (file)
@@ -292,7 +292,7 @@ _gtk_theming_background_init_context (GtkThemingBackground *bg)
   _gtk_theming_background_apply_clip (bg);
   _gtk_theming_background_apply_origin (bg);
 
-  bg->image = _gtk_css_image_value_get_image (_gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_IMAGE));
+  bg->image = _gtk_css_image_value_get_image (_gtk_css_array_value_get_nth (_gtk_style_context_peek_property (bg->context, GTK_CSS_PROPERTY_BACKGROUND_IMAGE), 0));
 }
 
 void